package GenericStudy.Exa4;

/**
 * Maximum接口的一种具体的实现
 * @param <T>
 */
public class GenericComparison<T extends Comparable<T>> implements Maximum<T> {

    /**
     * 获取数组array的最大值
     * @param array 目标数组
     * @return 数组中的最大值
     */
    @Override
    public T getMax(T[] array) {
        //非规则调用处理
        if (array == null || array.length == 0) {
            return null;
        }
        T max = array[0];
        //遍历剩下的元素进行比较将最大的值存入max中
        for (int i = 1; i < array.length; i++) {
            if (max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }

    /**
     * 获取数组array的最小值
     * @param array 目标数组
     * @return 数组中的最小值
     */
    @Override
    public T getMin(T[] array) {
        //非规则调用处理
        if (array == null || array.length == 0) {
            return null;
        }
        T min = array[0];
        //遍历剩下的元素进行比较，将最小的值存入min中
        for (int i = 1; i < array.length; i++) {
            if (min.compareTo(array[i]) > 0) {
                min = array[i];
            }
        }
        return min;
    }

    /**
     * 对目标数组进行升序排序处理
     * @param array 目标数组
     * @return 排序后的数组
     */
    @Override
    public T[] sorted(T[] array) {
        //非规则调用处理
        if (array == null || array.length == 0) {
            return null;
        }
//        for(T t:array){
//            System.out.print(t+" ");
//        }
       // System.out.println();
        //采用冒泡排序进行排序
        for (int i = 0; i < array.length; i++) {
            for(int j=i;j<array.length;j++){
                if(array[i].compareTo(array[j])>0){
                    T temp=array[i];
                    array[i]=array[j];
                    array[j]=temp;
                }
            }
//            for(T t:array){
//                System.out.print(t+" ");
//            }
            //System.out.println();

        }
        return array;
    }
}
